<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
        //1.内存溢出
        //空间占用的过多超出上限就会造成崩溃
        var obj={};
        for(var i=0;i<100;i++)
        {
            obj[i]=new Array(100000000);
        }
        //控制台输出obj，obj里有100个元素
        console.log(obj);

        //2.内存泄漏
        //意外的全局变量
        function fn()
        {
            //不用var定义变量a，直接默认a为全局变量
            a=3;
            //用var定义变量，直接默认a作用域当前作用域
            var b=4
            console.log(a);
            console.log(b);
        }
        fn();
        //因为存在是否使用var定义，所以a和b在全局范围中输出的结果不一样
        console.log(a);
        console.log(window);
        //console.log(b);

        //启动循环定时器后不清理，也会产生内存泄漏。

        //闭包产生的内存泄漏
        function fn1()
        {
            var a=4;
            function fn2()
            {
                console.log(++a);
            }
            return fn2;
        }
        var f=fn1();
        f();
        f();
        //解决方法，然后f()成为垃圾
        f=null;
    </script>
</head>
<body>
    <!--
        1.内存溢出
        一种程序运行出现的错误
        当程序运行需要的内存超过了剩余的内存时，就出抛出内存溢出的错误
        2.内存泄漏
        占用的内存没有及时释放
        内存泄漏积累多了就容易导致内存溢出
        常见的内存泄漏：
            意外的全局变量
            没有及时清理的计时器或者回调函数
            闭包
    -->
</body>
</html>